% 假设第一个Excel文件名为'categories.xlsx'，包含品类和编号  
% 假设第二个Excel文件名为'sales.xlsx'，包含菜品代码、销售时间和价格  
  
% 读取品类和编号数据  
filename_categories = 'C:\Users\20376\Desktop\论文\附件1.xlsx';
categories_table = readtable(filename_categories);
category_names = categories_table.CategoryName; % 假设列名为'品类'
category_ids = categories_table.CategoryID; % 假设列名为'编号'
  
% 读取销售数据  
filename_sales = 'C:\Users\20376\Desktop\论文\附件2.xlsx';  
sales_table = readtable(filename_sales);  
product_codes = sales_table.ProductID; % 假设列名为'代码'     
quantities = sales_table.ProductSales; % 假设存在一列名为'销售量'  
  
% 创建一个空的结构数组来存储每个品类的销售量  
category_sales = containers.Map('KeyType', 'double', 'ValueType', 'any');  
  
% 遍历销售数据，将销售量按品类编号分组  
for i = 1:height(sales_table)  
    code = product_codes{i};  
    quantity = quantities(i);  
    % 查找对应的品类编号（这里假设代码和编号是直接对应的）  
    category_id_index = find(category_ids == code, 1, 'first');  
    if ~isempty(category_id_index)  
        category_id = category_ids(category_id_index);  
        % 如果品类已存在，累加销售量；否则，创建新的品类条目  
        if category_sales.isKey(category_id)  
            current_sales = category_sales(category_id);  
            current_sales.quantity = current_sales.quantity + quantity;  
            current_sales.times = [current_sales.times; sale_times{i}]; % 如果需要记录所有销售时间  
            category_sales(category_id) = current_sales;  
        else  
            category_sales(category_id) = struct('quantity', quantity, 'times', sale_times(i,:));  
        end  
    end  
end  
  
% 找出每个品类的销售量最大值（单次销售）  
max_sales_per_category = containers.Map('KeyType', 'double', 'ValueType', 'any');  
for key = keys(category_sales)  
    category_data = category_sales(key);  
    % 对销售量进行排序并找到最大的那一次  
    [~, idxMax] = max([category_data.quantity]);  
    max_sale = category_data(idxMax);  
    max_sales_per_category(key) = max_sale;  
end  
  
% 显示结果  
for key = keys(max_sales_per_category)  
    fprintf('品类编号 %d 的最大单次销售量是: %d，发生在时间: %s\n', key, max_sales_per_category(key).quantity, max_sales_per_category(key).time);  
end